#include "../middleware/CommunicationRobot5.h"
#include "../middleware/CommunicationADP.h"
#include "../middleware/CommunicationAGV.h"
#include "../application/AdminKeys.h"
#include "../common/Random.h"
#include "../logger/logger.h"

int main(int argc, char** argv){
	CLogger::create("Almacen De Piezas");
	CLogger::setLevel(LogLevelEnum::TRACE);
	CLogger::log("Empieza a simular.", LogLevelEnum::INFO);

	AdminKeys adminZonaIzq(ZONA_IZQ);

	middleware::CommunicationRobot5 m_ComRobot5;
	middleware::CommunicationADP m_ComADP;
	middleware::CommunicationAGV comAGV(adminZonaIzq.getAgvKey());

	// Le pido piezas al AGV para los productos
	PedidoPiezas pedido;
	memset(pedido.piezas,0,MAX_PIEZAS * sizeof(int));
	pedido.piezas[0] = 41;
	pedido.piezas[1] = 43;
	pedido.piezas[2] = 42;
	comAGV.agregarPedidoCanastos(pedido);

	while(true){

		CLogger::log("Esperando pedido de Canasto", LogLevelEnum::INFO);
		PedidoCanasto pedido=m_ComADP.getPedidoDeCanasto();

		CLogger::log("Materializando canasto", LogLevelEnum::INFO);
		Canasto canasto;
		canasto.idPieza=pedido.idPieza;
		canasto.cantidad=Random::randomInt(1000, 1500);
		canasto.uso=0;
		canasto.idAGV=pedido.idAgv;

		m_ComADP.llevarCanastoAlR5(canasto);
		CLogger::log("Canasto enviado", LogLevelEnum::INFO);
		m_ComRobot5.incrementarPedidos(R5_PEDIDOS_PENDIENTES_RECEPCION_CANASTOS);

		CLogger::log("Contador de pedidos incrementado", LogLevelEnum::INFO);
		m_ComRobot5.despertarInteligente();

	}

	return 0;
}

